///////////////////////////////
// Analizador léxico XML
///////////////////////////////


header {
	package practpl.cuatro;
}


class AnalexXML extends Lexer;

	options {
		k = 3;
		charVocabulary = '\3'..'\377';
	}

	tokens{
		
		//numeros
		LIT_REAL;
		LIT_ENTERO;
		
		// tipos
		INT = "int";
		CHAR = "char";
	
		// instrucciones
		IF = "if";
		WHILE = "while";
		VOID = "void";
		
	}

 	protected NUEVA_LINEA: "\r\n" {newline();};
	BLANCO: (' '|'\t'|NUEVA_LINEA) {$setType(Token.SKIP);};
	
	protected DIGITO: '0'..'9';
	NUMERO : ((DIGITO)+ '.') => (DIGITO)+ '.' (DIGITO)* {$setType(LIT_REAL);} | (DIGITO)+ {$setType(LIT_ENTERO);};
	
	protected LETRA: ('A'..'Z')|('a'..'z');
	IDENT : (LETRA)((DIGITO)|(LETRA))*;
	
	OPERADOR: '+'|'-'|'/'|'*'|'\\';
	PARENTESIS: '('|')';
	LLAVES: '{' | '}';
	ANGULO_A: '<';
	ANGULO_C: '>';
	SEPARADOR: ';' | ',' | '.';
	ASIGNAR : ":=";
	IGUAL : '=';
	AND : '&';
	PORCENTAJE : '%';
	COMILLAS : '"';
	
	EBIBLIOTECA: ANGULO_A  ('/')? "biblioteca" ANGULO_C;
	ELIBRO : ANGULO_A ('/')? "libro"  ANGULO_C;
	ETITULO : ANGULO_A ('/')? "titulo" ANGULO_C;
	EAUTOR : ANGULO_A ('/')? "autor" ANGULO_C;
	EEDITORIAL : ANGULO_A ('/')? "editorial" ANGULO_C;
	
//	ETIQUETA: ANGULO_A IDENT ANGULO_C;
//	ETIQUETA_C: ANGULO_A ('/') IDENT ANGULO_C;
	
	
	COMENTARIO: ( "<!--" ( options {greedy = false;}: . )* "-->" ) {$setType(Token.SKIP);};
	
	